package enfase.cfc.entidade;

import java.io.Serializable;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Transient;

import enfase.cfc.enumerador.IndicadorSexo;

/**
 * Classe que representa a entidade Pessoa
 * 
 * @author Leonardo
 * 
 */
@Entity
@Table(name = "cfc_pessoa")
public class Pessoa implements Serializable {

	private static final long serialVersionUID = 5725718168088100670L;

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "SEQ_PESSOA")
	private Long id;
	@Column(name = "NOME")
	private String nome;
	@Column(name = "NOME_FANTASIA")
	private String nomeFantasia;
	@Column(name = "CPF")
	private String cpf;
	@Column(name = "CNPJ")
	private String cnpj;
	@Column(name = "RG")
	private String rg;

	@Enumerated(EnumType.STRING)
	@Column(name = "IND_SEXO")
	private IndicadorSexo indSexo;

	@Transient
	private String sexo;

	@OneToOne(mappedBy = "pessoa", cascade = CascadeType.REMOVE)
	private Cliente cliente;

	/**
	 * Retorna o valor do atributo.
	 * 
	 * @return O valor do atributo id
	 */
	public Long getId() {
		return id;
	}

	/**
	 * Define o valor do atributo.
	 * 
	 * @param id
	 *            atribui um valor ao atributo id
	 */
	public void setId(Long id) {
		this.id = id;
	}

	/**
	 * Retorna o valor do atributo.
	 * 
	 * @return O valor do atributo nome
	 */
	public String getNome() {
		return nome;
	}

	/**
	 * Define o valor do atributo.
	 * 
	 * @param nome
	 *            atribui um valor ao atributo nome
	 */
	public void setNome(String nome) {
		this.nome = nome;
	}

	/**
	 * Retorna o valor do atributo.
	 * 
	 * @return O valor do atributo nomeFantasia
	 */
	public String getNomeFantasia() {
		return nomeFantasia;
	}

	/**
	 * Define o valor do atributo.
	 * 
	 * @param nomeFantasia
	 *            atribui um valor ao atributo nomeFantasia
	 */
	public void setNomeFantasia(String nomeFantasia) {
		this.nomeFantasia = nomeFantasia;
	}

	/**
	 * Retorna o valor do atributo.
	 * 
	 * @return O valor do atributo cpf
	 */
	public String getCpf() {
		return cpf;
	}

	/**
	 * Define o valor do atributo.
	 * 
	 * @param cpf
	 *            atribui um valor ao atributo cpf
	 */
	public void setCpf(String cpf) {
		this.cpf = cpf;
	}

	/**
	 * Retorna o valor do atributo.
	 * 
	 * @return O valor do atributo cnpj
	 */
	public String getCnpj() {
		return cnpj;
	}

	/**
	 * Define o valor do atributo.
	 * 
	 * @param cnpj
	 *            atribui um valor ao atributo cnpj
	 */
	public void setCnpj(String cnpj) {
		this.cnpj = cnpj;
	}

	/**
	 * Retorna o valor do atributo.
	 * 
	 * @return O valor do atributo rg
	 */
	public String getRg() {
		return rg;
	}

	/**
	 * Define o valor do atributo.
	 * 
	 * @param rg
	 *            atribui um valor ao atributo rg
	 */
	public void setRg(String rg) {
		this.rg = rg;
	}

	/**
	 * Retorna o valor do atributo.
	 * 
	 * @return O valor do atributo indSexo
	 */
	public IndicadorSexo getIndSexo() {
		return indSexo;
	}

	/**
	 * Define o valor do atributo.
	 * 
	 * @param indSexo
	 *            atribui um valor ao atributo indSexo
	 */
	public void setIndSexo(IndicadorSexo indSexo) {
		this.indSexo = indSexo;
	}

	/**
	 * Retorna o valor do atributo.
	 * 
	 * @return O valor do atributo sexo
	 */
	public String getSexo() {
		return sexo;
	}

	/**
	 * Define o valor do atributo.
	 * 
	 * @param sexo
	 *            atribui um valor ao atributo sexo
	 */
	public void setSexo(String sexo) {
		this.sexo = sexo;
	}

	/**
	 * Retorna o valor do atributo.
	 * 
	 * @return O valor do atributo cliente
	 */
	public Cliente getCliente() {
		return cliente;
	}

	/**
	 * Define o valor do atributo.
	 * 
	 * @param cliente
	 *            atribui um valor ao atributo cliente
	 */
	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}

}
